#include "UDPserver.hpp"
#include <iostream>
#include <memory>
#include "route.hpp"
#include "Threadpool.hpp"
using namespace Threadpoolmodule;
using task = std::function<void()>;
// ./udpserver ip port
int main(int argc,char* argv[])
{
    if(argc!=2)
    {
        std::cerr<<"Usage: "<<argv[0]<<"  port"<<std::endl;
        return 1;
    }
    //std::string ip=argv[1];
    uint16_t port=std::stoi(argv[1]);

    Enable_console_logstrategy();

    Route r;

    auto tp=Threadpool<task>::getinstance();
    tp->start();

    std::unique_ptr<udpserver> usvr=std::make_unique<udpserver>(port/*,ip*/,[&r,tp](int sockfd,const std::string& mess,Inetaddr& peer){
        task t=std::bind(&Route::messRoute,&r,sockfd,mess,peer);
        tp->equeue(t);
    });
    //这里不可以使用d1.translate，因为d1.translate 是一个 成员函数，它本质上是一个函数指针（还带有 this 的隐含参数），不能直接当作对象传给 udpserver 的构造函数。
    usvr->init();
    usvr->Start(); 
    return 0;
}
